package com.leo.consumer.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 通过此配置文件，可以Spring AMQP会自动创建交换机、队列、绑定关系等
 * 并且多次启动，不会重复创建
 */
@Configuration
public class DirectExchangeConfig {

    /**
     * 声明交换机。使用new的方式
     */
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange("gen.direct");
    }

    /**
     * 声明交换机。使用Builder的方式
     */
    @Bean
    public DirectExchange directExchangeWithBuilder() {
        return ExchangeBuilder.directExchange("gen.builder.direct").build();
    }

    /**
     * 声明队列。使用new的方式
     */
    @Bean
    public Queue directQueue1() {
        return new Queue("gen.direct.queue1");
    }

    /**
     * 声明队列。使用Builder的方式
     */
    @Bean
    public Queue directQueue2() {
        return QueueBuilder.durable("gen.direct.queue2").build();
    }

    /**
     * 绑定队列到交换机
     */
    @Bean
    public Binding directQueue1Binding(Queue directQueue1, DirectExchange directExchange) {
        return BindingBuilder.bind(directQueue1).to(directExchange).with("gen.routing.key");
    }

    /**
     * 绑定队列到交换机
     */
    @Bean
    public Binding directQueue2Binding() {
        return BindingBuilder.bind(directQueue2()).to(directExchangeWithBuilder()).with("gen.routing.key");
    }

}
